package com.hopu.service.MyDept;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hopu.entity.MyDept;
import com.hopu.mapper.MyDeptMapper;
import com.hopu.util.HouseResult;
import com.hopu.util.StaticData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Package: com.hopu.service
 * @ClassName: MyDeptServiceImple
 * @Author: xiaoBao
 * @CreateTime: 2020/10/26 18:28
 * @Description: 【部门信息功能服务层实现类】
 */
@Service("myDeptServiceImple")  /**定义服务层*/
public class MyDeptServiceImple implements MyDeptService{
    @Autowired /**自动装载Mapper动态接口（持久层）*/
    private MyDeptMapper myDeptMapper;


    /**
     * findAllDept 【查询所有部门信息】
     * @param current 当前页
     * @param pflag 部门是否已撤销
     * @return 将分页后的部门信息表返回给表现层。
     */
    @Override
    public HouseResult<PageInfo<MyDept>> findAllDept(int current, int pflag) {
        /**使用分页技术*/
        //1、使用startPage方法：参数1：配置 “分页的初始页”；参数2：“当前页要显示的信息行数”；
        PageHelper.startPage(current, StaticData.DEFAULT_PAGE_SIZE);

        //2、调用持久层操作：查询所有部门信息；
        List<MyDept> partList = myDeptMapper.findAllPartInfo(pflag);

        //3、实例化PageInfo对象，将角色信息集合进行分页；
        PageInfo<MyDept> allPartInfo = new PageInfo<>(partList);

        //如果集合的大小不为0
        if(partList.size() != 0){
            return new HouseResult<>(0,"查询成功",allPartInfo);
        }else {
            return new HouseResult<>(1,"查询失败",allPartInfo);
        }
    }


    /**
     * findPart 【1、根据部门名称验证部门是否存在；2、根据点击的部门Id查询部门信息，实现修改弹窗数据回显。】
     * @param myDept 部门名称；
     * @return 将判断逻辑结果返回给表现层。
     */
    @Override
    public HouseResult<MyDept> findPart(MyDept myDept){
        //调用持久层操作：查询部门是否存在
        MyDept parts = myDeptMapper.findPart(myDept);

        //如果部门不存在
        if (parts == null){
            return new HouseResult<>(1,"部门名称不存在",null);
        }else {
            //如果该部门存在
            return new HouseResult<>(0,"部门名称已存在",parts);
        }
    }


    /**
     * addPart 【根据名称和备注添加一条部门信息】
     * @param myDept 部门名称 备注;
     * @return 将执行结果返回给表现层。
     */
    @Override
    public HouseResult<Object> addPart(MyDept myDept) {
        //执行持久层逻辑：添加一条部门信息；
        Integer successResult = myDeptMapper.addPart(myDept);

        //如果执行结果影响行数不为0，则表示添加成功；
        if(successResult != 0){
            return new HouseResult<>(0,"部门添加成功",successResult);
        }else {
            return new HouseResult<>(1,"部门添加失败",successResult);
        }
    }


    /**
     * updatePartById 【根据Id修改一条部门信息】
     * @param myDept 部门名称、备注、Id；
     * @return 将持久层的执行结果返回给表现层。
     */
    @Override
    public HouseResult<Object> updatePartById(MyDept myDept) {
        //执行持久层逻辑：根据Id修改一条部门信息；
        Integer successResult = myDeptMapper.updatePartById(myDept);

        //如果执行结果影响行数不为0，则表示修改成功；
        if(successResult != 0){
            return new HouseResult<>(0,"部门修改成功",successResult);
        }else {
            return new HouseResult<>(1,"部门修改失败",successResult);
        }
    }


    /**
     * delPart 【根据Id撤销一个部门】
     * @param myDept 部门Id；
     * @return 将撤销执行结果影响的行数返回给表现层。
     */
    @Override
    public HouseResult<Object> delPart(MyDept myDept) {
        //执行持久层逻辑：根据Id撤销一个部门（修改操作：软删除，不删除这条数据，只将需要撤销的部门flag值设为1）；
        Integer successResult = myDeptMapper.delPart(myDept);

        //如果执行结果影响行数不为0，则表示撤销成功；
        if(successResult != 0){
            return new HouseResult<>(0,"部门撤销成功",successResult);
        }else {
            return new HouseResult<>(1,"部门撤销失败",successResult);
        }
    }


    /**
     * restorePart 【根据Id恢复一个部门】
     * @param myDept 部门Id；
     * @return 将执行影响行数结果返回给表现层。
     */
    @Override
    public HouseResult<Object> restorePart(MyDept myDept) {
        //执行持久层逻辑：根据Id恢复一个部门
        Integer successResult = myDeptMapper.restorePart(myDept);

        //如果执行结果影响行数不为0，则表示恢复成功；
        if(successResult != 0){
            return new HouseResult<>(0,"部门恢复成功",successResult);
        }else {
            return new HouseResult<>(1,"部门恢复失败",successResult);
        }
    }


    /**
     * findAllPartPidAndPname 【查询所有部门Id和名称（用于实现添加员工时在下拉框中显示所有部门信息）】
     * @return 将查询到的数据返回给服务层。
     */
    @Override
    public HouseResult<List<MyDept>> findAllPartPidAndPname() {
        //调用持久层操作：查询所有现有的部门信息（前端只取部门Id和名称），返回一个List集合；
        List<MyDept> allPartPidAndPname = myDeptMapper.findAllPartInfo(0);

        //判断：如果查询到的集合大小不为0，则将数据返回给表现层；
        if(allPartPidAndPname.size() != 0){
            return new HouseResult<>(0,"查询成功",allPartPidAndPname);
        } else {
            return new HouseResult<>(1,"查询失败",allPartPidAndPname);
        }
    }

}
